#pragma once

#include <iostream>
#include <pthread.h>
#include <sched.h>

/**
 * @brief 通用工具命名空间。
 */
namespace Common {

/**
 * @brief 将当前线程绑定到指定 CPU 核心。
 * @param core_id 目标核心编号；小于 0 时视为“不设置亲和性”。
 * @return true 表示成功或未指定绑定；false 表示绑定失败。
 */
inline bool setThreadCore(int core_id) {
  if (core_id < 0) {
    return true;
  }

  cpu_set_t cpuset;
  CPU_ZERO(&cpuset);
  CPU_SET(static_cast<unsigned>(core_id), &cpuset);

  const auto rc =
      pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
  if (rc != 0) {
    std::cerr << "pthread_setaffinity_np 失败，错误码 = " << rc << '\n';
    return false;
  }
  return true;
}

} // namespace Common